home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / misc / volume15 / sccs2rcs_kc / part01 next >
Encoding:
Text File  |  1990-10-05  |  11.1 KB  |  368 lines

  1. Newsgroups: comp.sources.misc
  2. X-UNIX-From: news@Viewlogic.COM
  3. organization: Viewlogic Systems, Inc., Marlboro, MA
  4. keywords: SCCS to RCS translation
  5. subject: v15i022: sccs2rcs
  6. from: kenc@Viewlogic.COM (Kenstir)
  7. Sender: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
  8.  
  9. Posting-number: Volume 15, Issue 22
  10. Submitted-by: kenc@Viewlogic.COM (Kenstir)
  11. Archive-name: sccs2rcs_kc/part01
  12.  
  13. Here is a script file which I spent a lot of time perfecting.  It
  14. converts an existing SCCS history (s-file) into the identical RCS
  15. history (RCS-file).
  16.  
  17. It has been tested under SunOS 3.5, 4.0.3, 4.1; Ultrix 2.0, 3.1
  18. Be sure to look at the README file before using!
  19. --
  20. Kenneth H. Cox
  21. Viewlogic Systems, Inc.
  22. kenstir@viewlogic.com
  23. ...!harvard!cg-atla!viewlog!kenstir
  24. -----------------------------------------------------------------------
  25. #! /bin/sh
  26. # This is a shell archive.  Remove anything before this line, then
  27. unpack
  28. # it by saving it into a file and typing "sh file".  To overwrite
  29. existing
  30. # files, type "sh file -c".  You can also feed this as standard input
  31. via
  32. # unshar, or by typing "sh <file", e.g..  If this archive is complete,
  33. you
  34. # will see the following message at the end:
  35. #        "End of shell archive."
  36. # Contents:  sccs2rcs README
  37. # Wrapped by kenc@madmax on Thu Oct  4 20:58:43 1990
  38. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  39. if test -f sccs2rcs -a "${1}" != "-c" ; then 
  40.   echo shar: Will not over-write existing file \"sccs2rcs\"
  41. else
  42. echo shar: Extracting \"sccs2rcs\" \(7364 characters\)
  43. sed "s/^X//" >sccs2rcs <<'END_OF_sccs2rcs'
  44. X#!/bin/csh -f
  45. X#
  46. X# Sccs2rcs is a script to convert an existing SCCS
  47. X# history into an RCS history without losing any of
  48. X# the information contained therein.
  49. X# It has been tested under the following OS's:
  50. X#     SunOS 3.5, 4.0.3, 4.1
  51. X#     Ultrix-32 2.0, 3.1
  52. X#
  53. X# Things to note:
  54. X#   + It will NOT delete or alter your ./SCCS history under any
  55. circumstances.
  56. X#
  57. X#   + Run in a directory where ./SCCS exists and where you can
  58. X#       create ./RCS
  59. X#
  60. X#   + /usr/local/bin is put in front of the default path.
  61. X#     (SCCS under Ultrix is set-uid sccs, bad bad bad, so
  62. X#     /usr/local/bin/sccs here fixes that)
  63. X#
  64. X#   + Date, time, author, comments, branches, are all preserved.
  65. X#
  66. X#   + If a command fails somewhere in the middle, it bombs with
  67. X#     a message -- remove what it's done so far and try again.
  68. X#         "rm -rf RCS; sccs unedit `sccs tell`; sccs clean"
  69. X#     There is no recovery and exit is far from graceful.
  70. X#     If a particular module is hanging you up, consider
  71. X#     doing it separately; move it from the current area so that
  72. X#     the next run will have a better chance or working.
  73. X#     Also (for the brave only) you might consider hacking
  74. X#     the s-file for simpler problems:  I've successfully changed
  75. X#     the date of a delta to be in sync, then run "sccs admin -z"
  76. X#     on the thing.
  77. X#
  78. X#   + After everything finishes, ./SCCS will be moved to ./old-SCCS.
  79. X#
  80. X# This file may be copied, processed, hacked, mutilated, and
  81. X# even destroyed as long as you don't tell anyone you wrote it.
  82. X#
  83. X# Ken Cox
  84. X# Viewlogic Systems, Inc.
  85. X# kenstir@viewlogic.com
  86. X# ...!harvard!cg-atla!viewlog!kenstir
  87. X#
  88. X# $Id: sccs2rcs,v 1.12 90/10/04 20:52:23 kenc Exp $
  89. X
  90. X
  91. X#we'll assume the user set up the path correctly
  92. X# for the Pmax, /usr/ucb/sccs is suid sccs, what a pain
  93. X#   /usr/local/bin/sccs should override /usr/ucb/sccs there
  94. Xset path = (/usr/local/bin $path)
  95. X
  96. X
  97. X############################################################
  98. X# Error checking
  99. X#
  100. Xif (! -w .) then
  101. X    echo "Error: ./ not writeable by you."
  102. X    exit 1
  103. Xendif
  104. Xif (! -d SCCS) then
  105. X    echo "Error: ./SCCS directory not found."
  106. X    exit 1
  107. Xendif
  108. Xset edits = (`sccs tell`)
  109. Xif ($#edits) then
  110. X    echo "Error: $#edits file(s) out for edit...clean up before
  111. converting."
  112. X    exit 1
  113. Xendif
  114. Xif (-d RCS) then
  115. X    echo "Warning: RCS directory exists"
  116. X    if (`ls -a RCS | wc -l` > 2) then
  117. X        echo "Error: RCS directory not empty
  118. X        exit 1
  119. X    endif
  120. Xelse
  121. X    mkdir RCS
  122. Xendif
  123. X
  124. Xsccs clean
  125. X
  126. Xset logfile = /tmp/sccs2rcs_$$_log
  127. Xrm -f $logfile
  128. Xset tmpfile = /tmp/sccs2rcs_$$_tmp
  129. Xrm -f $tmpfile
  130. Xset emptyfile = /tmp/sccs2rcs_$$_empty
  131. Xecho -n "" > $emptyfile
  132. Xset initialfile = /tmp/sccs2rcs_$$_init
  133. Xecho "Initial revision" > $initialfile
  134. Xset sedfile = /tmp/sccs2rcs_$$_sed
  135. Xrm -f $sedfile
  136. X
  137. X# the quotes surround the dollar signs to fool RCS when I check in this
  138. script
  139. Xset sccs_keywords = (\
  140. X    '%W%[     ]*%G%'\
  141. X    '%W%[     ]*%E%'\
  142. X    '%W%'\
  143. X    '%M%[     ]*%I%[     ]*%G%'\
  144. X    '%M%[     ]*%I%[     ]*%E%'\
  145. X    '%M%'\
  146. X    '%I%'\
  147. X    '%G%'\
  148. X    '%E%'\
  149. X    '%U%')
  150. Xset rcs_keywords = (\
  151. X    '$'Id'$'\
  152. X    '$'Id'$'\
  153. X    '$'Id'$'\
  154. X    '$'Id'$'\
  155. X    '$'Id'$'\
  156. X    '$'RCSfile'$'\
  157. X    '$'Revision'$'\
  158. X    '$'Date'$'\
  159. X    '$'Date'$'\
  160. X    '')
  161. X
  162. X
  163. X############################################################
  164. X# Get some answers from user
  165. X#
  166. Xecho ""
  167. Xecho "Do you want to be prompted for a description of each"
  168. Xecho "file as it is checked in to RCS initially?"
  169. Xecho -n "(y=prompt for description, n=null description) [y] ?"
  170. Xset ans = $<
  171. Xif ((_$ans == _) || (_$ans == _y) || (_$ans == _Y)) then
  172. X    set nodesc = 0
  173. Xelse
  174. X    set nodesc = 1
  175. Xendif
  176. Xecho ""
  177. Xecho "The default keyword substitutions are as follows and are"
  178. Xecho "applied in the order specified:"
  179. Xset i = 1
  180. Xwhile ($i <= $#sccs_keywords)
  181. X#    echo '    '\"$sccs_keywords[$i]\"'    ==>    '\"$rcs_keywords[$i]\"
  182. X    echo "    $sccs_keywords[$i]    ==>    $rcs_keywords[$i]"
  183. X    @ i = $i + 1
  184. Xend
  185. Xecho ""
  186. Xecho -n "Do you want to change them [n] ?"
  187. Xset ans = $<
  188. Xif ((_$ans != _) && (_$ans != _n) && (_$ans != _N)) then
  189. X    echo "You can't always get what you want."
  190. X    echo "Edit this script file and change the variables:"
  191. X    echo '    $sccs_keywords'
  192. X    echo '    $rcs_keywords'
  193. Xelse
  194. X    echo "good idea."
  195. Xendif
  196. X
  197. X# create the sed script
  198. Xset i = 1
  199. Xwhile ($i <= $#sccs_keywords)
  200. X    echo "s,$sccs_keywords[$i],$rcs_keywords[$i],g" >> $sedfile
  201. X    @ i = $i + 1
  202. Xend
  203. X
  204. X
  205. X############################################################
  206. X# Loop over every s-file in SCCS dir
  207. X#
  208. Xforeach sfile (SCCS/s.*)
  209. X    # get rid of the "s." at the beginning of the name
  210. X    set file = `echo $sfile:t | sed -e "s/^..//"`
  211. X
  212. X    # work on each rev of that file in ascending order
  213. X    set firsttime = 1
  214. X    foreach rev (`sccs prs $file | grep "^D " | awk '{print $2}' | tail
  215. -r`)
  216. X        if ($status != 0) goto ERROR
  217. X
  218. X        # get file into current dir and get stats
  219. X        set date = `sccs prs -r$rev $file | grep "^D " | awk '{print
  220. $3, $4}'`
  221. X        set author = `sccs prs -r$rev $file | grep "^D " | awk '{print
  222. $5}'`
  223. X        echo ""
  224. X        echo "==> file $file, rev=$rev, date=$date, author=$author"
  225. X        sccs edit -r$rev $file >>& $logfile
  226. X        if ($status != 0) goto ERROR
  227. X        echo checked out of SCCS
  228. X
  229. X        # add RCS keywords in place of SCCS keywords
  230. X        sed -f $sedfile $file > $tmpfile
  231. X        if ($status != 0) goto ERROR
  232. X        echo performed keyword substitutions
  233. X        cp $tmpfile $file
  234. X
  235. X        # check file into RCS
  236. X        if ($firsttime) then
  237. X            set firsttime = 0
  238. X            if ($nodesc) then
  239. X                ci -f -r$rev -d"$date" -w$author -t$emptyfile $file <
  240. $initialfile >>& $logfile
  241. X                if ($status != 0) goto ERROR
  242. X                echo initial rev checked into RCS without description
  243. X            else
  244. X                echo ""
  245. X                echo Enter a brief description of the file $file \(end
  246. w/ Ctrl-D\):
  247. X                cat > $tmpfile
  248. X                ci -f -r$rev -d"$date" -w$author -t$tmpfile $file <
  249. $initialfile >>& $logfile
  250. X                if ($status != 0) goto ERROR
  251. X                echo initial rev checked into RCS
  252. X            endif
  253. X        else
  254. X            # get RCS lock
  255. X            rcs -l $file >>& $logfile
  256. X            if ($status != 0) goto ERROR
  257. X            echo got lock
  258. X            sccs prs -r$rev $file | grep "." > $tmpfile
  259. X            # it's OK if grep fails here and gives status == 1
  260. X            # put the delta message in $tmpfile
  261. X            ed $tmpfile >>& $logfile <<EOF
  262. X/COMMENTS
  263. X1,.d
  264. Xw
  265. Xq
  266. XEOF
  267. X            ci -f -r$rev -d"$date" -w$author $file < $tmpfile >>&
  268. $logfile
  269. X            if ($status != 0) goto ERROR
  270. X            echo checked into RCS
  271. X        endif
  272. X        sccs unedit $file >>& $logfile
  273. X        if ($status != 0) goto ERROR
  274. X    end
  275. X    rm -f $file
  276. Xend
  277. X
  278. X
  279. X############################################################
  280. X# Clean up
  281. X#
  282. Xecho cleaning up...
  283. Xmv SCCS old-SCCS
  284. Xrm -f $tmpfile $emptyfile $initialfile $sedfile
  285. Xecho ===================================================
  286. Xecho "       Conversion Completed Successfully"
  287. Xecho ""
  288. Xecho "         SCCS history now in old-SCCS/"
  289. Xecho ===================================================
  290. Xexit 0
  291. X
  292. XERROR:
  293. Xforeach f (`sccs tell`)
  294. X    sccs unedit $f
  295. Xend
  296. Xecho ""
  297. Xecho ""
  298. Xecho Danger\!  Danger\!
  299. Xecho Some command exited with a non-zero exit status.
  300. Xecho Log file exists in $logfile.
  301. Xecho ""
  302. Xecho Incomplete history in ./RCS -- remove it
  303. Xecho Original unchanged history in ./SCCS
  304. Xexit 1
  305. END_OF_sccs2rcs
  306. echo shar: 3 control characters may be missing from \"sccs2rcs\"
  307. if test 7364 -ne `wc -c <sccs2rcs`; then
  308.     echo shar: \"sccs2rcs\" unpacked with wrong size!
  309. fi
  310. chmod +x sccs2rcs
  311. # end of overwriting check
  312. fi
  313. if test -f README -a "${1}" != "-c" ; then 
  314.   echo shar: Will not over-write existing file \"README\"
  315. else
  316. echo shar: Extracting \"README\" \(1516 characters\)
  317. sed "s/^X//" >README <<'END_OF_README'
  318. XSccs2rcs is a script to convert an existing SCCS
  319. Xhistory into an RCS history without losing any of
  320. Xthe information contained therein.
  321. XIt has been tested under the following OS's:
  322. X    SunOS 3.5, 4.0.3, 4.1
  323. X    Ultrix-32 2.0, 3.1
  324. X
  325. XThings to note:
  326. X  + It will NOT delete or alter your ./SCCS history under any
  327. circumstances.
  328. X
  329. X  + Run in a directory where ./SCCS exists and where you can
  330. X      create ./RCS
  331. X
  332. X  + /usr/local/bin is put in front of the default path.
  333. X    (SCCS under Ultrix is set-uid sccs, bad bad bad, so
  334. X    /usr/local/bin/sccs here fixes that)
  335. X
  336. X  + Date, time, author, comments, branches, are all preserved.
  337. X
  338. X  + If a command fails somewhere in the middle, it bombs with
  339. X    a message -- remove what it's done so far and try again.
  340. X        "rm -rf RCS; sccs unedit `sccs tell`; sccs clean"
  341. X    There is no recovery and exit is far from graceful.
  342. X    If a particular module is hanging you up, consider
  343. X    doing it separately; move it from the current area so that
  344. X    the next run will have a better chance or working.
  345. X    Also (for the brave only) you might consider hacking
  346. X    the s-file for simpler problems:  I've successfully changed
  347. X    the date of a delta to be in sync, then run "sccs admin -z"
  348. X    on the thing.
  349. X
  350. X  + After everything finishes, ./SCCS will be moved to ./old-SCCS.
  351. X
  352. XThis file may be copied, processed, hacked, mutilated, and
  353. Xeven destroyed as long as you don't tell anyone you wrote it.
  354. X
  355. XKen Cox
  356. XViewlogic Systems, Inc.
  357. Xkenstir@viewlogic.com
  358. X...!harvard!cg-atla!viewlog!kenstir
  359. END_OF_README
  360. if test 1516 -ne `wc -c <README`; then
  361.     echo shar: \"README\" unpacked with wrong size!
  362. fi
  363. # end of overwriting check
  364. fi
  365. echo shar: End of shell archive.
  366. exit 0
  367.  
  368.